<?php

// 发立得信息发布系统房屋信息版(php+mysql) V1.0
// 演示地址: http://fang.chalide.cn
// 文件路径: sys/user.php
// 文件大小: 16198 字节
// 最后修改时间: 2025-05-23 20:40:36
// 作者: yujianyue
// 邮件: 15058593138@qq.com
// 版权所有,保留发行权和署名权
/**
 * 本文件功能：用户管理
 * 版权声明：保留发行权和署名权
 * 作者信息：15058593138@qq.com
 */

// 获取当前用户
$curr_user = check_login(USER_TYPE_ADMIN);
$db = DB::getInstance();

// 处理AJAX请求
if (isset($_GET['act'])) {
    $act = $_GET['act'];
    
    switch ($act) {
        // 获取用户列表
        case 'list':
            $page = isset($_POST['page']) ? intval($_POST['page']) : 1;
            $limit = 10;
            
            // 构建查询条件
            $where = '1=1';
            
            if (!empty($_POST['keyword'])) {
                $keyword = $db->escape($_POST['keyword']);
                $where .= " AND (user LIKE '%$keyword%' OR mobi LIKE '%$keyword%')";
            }
            
            if (isset($_POST['type']) && $_POST['type'] !== '') {
                $type = intval($_POST['type']);
                $where .= " AND type = $type";
            }
            
            if (isset($_POST['status']) && $_POST['status'] !== '') {
                $status = intval($_POST['status']);
                $where .= " AND status = $status";
            }
            
            // 查询总数
            $total = $db->count('user', $where);
            
            // 分页参数
            $pagination = get_pagination($total, $page, $limit);
            
            // 查询列表
            $sql = "SELECT * FROM user 
                    WHERE $where 
                    ORDER BY id DESC 
                    LIMIT {$pagination['offset']}, {$pagination['limit']}";
            
            $list = $db->getAll($sql);
            
            // 处理列表数据
            foreach ($list as &$item) {
                // 处理时间格式
                $item['add_time'] = format_datetime($item['add_time'], 'Y-m-d H:i:s');
                $item['log_time'] = $item['log_time'] ? format_datetime($item['log_time'], 'Y-m-d H:i:s') : '从未登录';
                
                // 隐藏密码
                unset($item['pass']);
            }
            
            // 返回数据
            json_msg(1, '获取成功', [
                'list' => $list,
                'page' => $pagination['page'],
                'total_page' => $pagination['total_page'],
                'total' => $pagination['total']
            ]);
            break;
            
        // 修改用户状态
        case 'status':
            if (empty($_POST['id'])) {
                json_msg(0, '参数错误');
            }
            
            $id = intval($_POST['id']);
            
            // 检查用户是否存在
            $sql = "SELECT id, status FROM user WHERE id = $id";
            $user = $db->getRow($sql);
            
            if (!$user) {
                json_msg(0, '用户不存在');
            }
            
            // 不能修改自己的状态
            if ($id == $curr_user['id']) {
                json_msg(0, '不能修改自己的状态');
            }
            
            // 切换状态
            $status = $user['status'] == USER_STATUS_ENABLED ? USER_STATUS_DISABLED : USER_STATUS_ENABLED;
            $result = $db->update('user', ['status' => $status], "id = $id");
            
            if ($result) {
                json_msg(1, '操作成功');
            } else {
                json_msg(0, '操作失败，请稍后重试');
            }
            break;
            
        // 添加用户
        case 'add':
            if (empty($_POST['user']) || empty($_POST['pass']) || empty($_POST['mobi']) || !isset($_POST['type'])) {
                json_msg(0, '请填写完整');
            }
            
            $user = $db->escape($_POST['user']);
            $pass = md5($_POST['pass']);
            $mobi = $db->escape($_POST['mobi']);
            $type = intval($_POST['type']);
            $status = isset($_POST['status']) ? intval($_POST['status']) : USER_STATUS_ENABLED;
            
            // 检查用户是否已存在
            $sql = "SELECT id FROM user WHERE user = '$user'";
            $exist = $db->getRow($sql);
            
            if ($exist) {
                json_msg(0, '该账号已存在');
            }
            
            // 插入数据
            $data = [
                'user' => $user,
                'pass' => $pass,
                'type' => $type,
                'mobi' => $mobi,
                'add_time' => date('Y-m-d H:i:s'),
                'status' => $status
            ];
            
            $userId = $db->insert('user', $data);
            
            if ($userId) {
                json_msg(1, '添加成功');
            } else {
                json_msg(0, '添加失败，请稍后重试');
            }
            break;
            
        // 重置密码
        case 'reset_pass':
            if (empty($_POST['id']) || empty($_POST['pass'])) {
                json_msg(0, '参数错误');
            }
            
            $id = intval($_POST['id']);
            $pass = md5($_POST['pass']);
            
            // 检查用户是否存在
            $sql = "SELECT id FROM user WHERE id = $id";
            $user = $db->getRow($sql);
            
            if (!$user) {
                json_msg(0, '用户不存在');
            }
            
            // 更新密码
            $result = $db->update('user', ['pass' => $pass], "id = $id");
            
            if ($result) {
                json_msg(1, '密码重置成功');
            } else {
                json_msg(0, '密码重置失败，请稍后重试');
            }
            break;
            
        default:
            json_msg(0, '未知操作');
    }
    
    exit;
}
    include './inc/head.php';
?>

<div class="user-container" style="background:#fff;padding:20px;border-radius:5px;box-shadow:0 1px 3px rgba(0,0,0,0.1);">
    <div class="top-bar">
        <div class="title" style="display:flex;justify-content:space-between;align-items:center;">
            <h2 style="margin:0;">用户管理</h2>
        </div>
        
        <div class="search-bar" style="margin-top:15px;display:flex;flex-wrap:wrap;">
            <div class="search-item" style="margin-right:10px;margin-bottom:10px;">
                <select id="type" class="form-control">
                    <option value="">所有类型</option>
                    <option value="<?php echo USER_TYPE_USER; ?>">普通用户</option>
                    <option value="<?php echo USER_TYPE_ADMIN; ?>">管理员</option>
                </select>
            </div>
            
            <div class="search-item" style="margin-right:10px;margin-bottom:10px;">
                <select id="status" class="form-control">
                    <option value="">所有状态</option>
                    <option value="<?php echo USER_STATUS_ENABLED; ?>">正常</option>
                    <option value="<?php echo USER_STATUS_DISABLED; ?>">禁用</option>
                </select>
            </div>
            
            <div class="search-item" style="margin-right:10px;margin-bottom:10px;flex:1;">
                <input type="text" id="keyword" class="form-control" placeholder="账号/手机号">
            </div>
            
            <div class="search-item" style="margin-bottom:10px;">
                <button type="button" id="search-btn" class="btn btn-primary">搜索</button>
            </div>
        </div>
    </div>
    
    <div id="user-list" style="margin-top:20px;"></div>
    <div id="pagination"></div>
</div>

<!-- 重置密码模态框 -->
<div id="reset-pass-modal" style="display:none;">
    <form id="reset-pass-form">
        <input type="hidden" name="id">
        <div class="form-group">
            <label class="form-label">新密码</label>
            <input type="password" name="pass" class="form-control" placeholder="请输入新密码" required>
        </div>
    </form>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // 加载用户列表
    loadUserList();
    
    // 搜索按钮点击事件
    document.getElementById('search-btn').addEventListener('click', function() {
        loadUserList();
    });
    
    // 回车搜索
    document.getElementById('keyword').addEventListener('keydown', function(e) {
        if (e.keyCode === 13) {
            loadUserList();
        }
    });

});

// 加载用户列表
function loadUserList(page) {
    page = page || 1;
    
    // 获取搜索参数
    const type = document.getElementById('type').value;
    const status = document.getElementById('status').value;
    const keyword = document.getElementById('keyword').value;
    
    // 显示加载中
    document.getElementById('user-list').innerHTML = '<div style="text-align:center;padding:20px;">加载中...</div>';
    
    // 请求数据
    ajax({
        url: 'sys.php?do=user&act=list',
        method: 'POST',
        data: {
            page: page,
            type: type,
            status: status,
            keyword: keyword
        },
        success: function(res) {
            if (res.code === 1) {
                // 渲染列表
                renderUserList(res.data.list);
                
                // 渲染分页
                document.getElementById('pagination').innerHTML = renderPagination(res.data.page, res.data.total_page);
                
                // 绑定分页事件
                bindPaginationEvents(function(page) {
                    loadUserList(page);
                });
                
                // 绑定操作事件
                bindUserOperationEvents();
            } else {
                document.getElementById('user-list').innerHTML = '<div style="text-align:center;padding:20px;">暂无数据</div>';
                document.getElementById('pagination').innerHTML = '';
                showToast(res.msg);
            }
        },
        error: function() {
            document.getElementById('user-list').innerHTML = '<div style="text-align:center;padding:20px;">加载失败，请刷新重试</div>';
            document.getElementById('pagination').innerHTML = '';
            showToast('网络错误，请稍后重试');
        }
    });
}

// 渲染用户列表
function renderUserList(list) {
    if (!list || list.length === 0) {
        document.getElementById('user-list').innerHTML = '<div style="text-align:center;padding:20px;">暂无数据</div>';
        return;
    }
    
    let html = '<table class="table">';
    html += '<tr><th>ID</th><th>账号</th><th>类型</th><th>手机号</th><th>注册时间</th><th>最后登录</th><th>状态</th><th>操作</th></tr>';
    
    for (let i = 0; i < list.length; i++) {
        const item = list[i];
        html += '<tr>';
        html += '<td>' + item.id + '</td>';
        html += '<td>' + item.user + '</td>';
        html += '<td>' + (item.type == <?php echo USER_TYPE_ADMIN; ?> ? '<span style="color:red;">管理员</span>' : '普通用户') + '</td>';
        html += '<td>' + item.mobi + '</td>';
        html += '<td>' + item.add_time + '</td>';
        html += '<td>' + item.log_time + '</td>';
        html += '<td>' + (item.status == <?php echo USER_STATUS_ENABLED; ?> ? '<span style="color:green;">正常</span>' : '<span style="color:red;">禁用</span>') + '</td>';
        html += '<td>';
        
        // 不能操作自己
        if (item.id != <?php echo $curr_user['id']; ?>) {
            html += '<a href="javascript:;" class="btn-status" data-id="' + item.id + '" style="margin-right:5px;">' + 
                    (item.status == <?php echo USER_STATUS_ENABLED; ?> ? '禁用' : '启用') + '</a>';
            html += '<a href="javascript:;" class="btn-reset-pass" data-id="' + item.id + '">重置密码</a>';
        } else {
            html += '<span style="color:#999;">当前账号</span>';
        }
        
        html += '</td>';
        html += '</tr>';
    }
    
    html += '</table>';
    
    document.getElementById('user-list').innerHTML = html;
}

// 绑定用户操作事件
function bindUserOperationEvents() {
    // 状态切换按钮
    const statusBtns = document.querySelectorAll('.btn-status');
    for (let i = 0; i < statusBtns.length; i++) {
        statusBtns[i].addEventListener('click', function() {
            const id = this.getAttribute('data-id');
            
            // 切换状态
            ajax({
                url: 'sys.php?do=user&act=status',
                method: 'POST',
                data: { id: id },
                success: function(res) {
                    showToast(res.msg);
                    if (res.code === 1) {
                        // 重新加载列表
                        loadUserList(document.querySelector('.pagination .current') ? 
                            parseInt(document.querySelector('.pagination .current').textContent) : 1);
                    }
                },
                error: function() {
                    showToast('网络错误，请稍后重试');
                }
            });
        });
    }
    
    // 重置密码按钮
    const resetPassBtns = document.querySelectorAll('.btn-reset-pass');
    for (let i = 0; i < resetPassBtns.length; i++) {
        resetPassBtns[i].addEventListener('click', function() {
            const id = this.getAttribute('data-id');
            showResetPassModal(id);
        });
    }
}


// 显示重置密码模态框
function showResetPassModal(id) {
    // 创建模态框内容
    const modalContent = document.createElement('div');
    modalContent.innerHTML = `
        <form id="reset-pass-form-modal">
            <input type="hidden" name="id" value="${id}">
            <div class="form-group">
                <label class="form-label">新密码</label>
                <input type="password" name="pass" class="form-control" placeholder="请输入新密码" required>
            </div>
        </form>
    `;
    
    showModal('重置密码', modalContent, [
        {
            text: '取消',
            class: 'btn btn-cancel',
            onClick: function() {
                const mask = document.querySelector('.mask');
                if (mask) {
                    document.body.removeChild(mask);
                }
            }
        },
        {
            text: '确定',
            class: 'btn btn-primary',
            onClick: function() {
                // 获取表单元素（模态框内的表单）
                const modalForm = document.getElementById('reset-pass-form-modal');
                if (!modalForm) {
                    showToast('表单元素不存在');
                    return;
                }
                
                const id = modalForm.elements.id.value;
                const pass = modalForm.elements.pass.value;
                
                if (!pass) {
                    showToast('请输入新密码');
                    return;
                }
                
                if (pass.length < 6) {
                    showToast('密码不能少于6位');
                    return;
                }
                
                // 重置密码
                ajax({
                    url: 'sys.php?do=user&act=reset_pass',
                    method: 'POST',
                    data: {
                        id: id,
                        pass: pass
                    },
                    success: function(res) {
                        showToast(res.msg);
                        if (res.code === 1) {
                            // 关闭模态框
                            const mask = document.querySelector('.mask');
                            if (mask) {
                                document.body.removeChild(mask);
                            }
                            // 重新加载列表
                            loadUserList();
                        }
                    },
                    error: function() {
                        showToast('网络错误，请稍后重试');
                    }
                });
            }
        }
    ]);
}
</script>
